[DllImport("psapi.dll", SetLastError=true)]
static extern bool GetProcessMemoryInfo(IntPtr hProcess, out PROCESS_MEMORY_COUNTERS counters, uint size);
Declare Function GetProcessMemoryInfo Lib "psapi.dll" (TODO) As TODO
[StructLayout(LayoutKind.Sequential, Size=40)]
private struct PROCESS_MEMORY_COUNTERS
{
public uint cb;
public uint PageFaultCount;
public uint PeakWorkingSetSize;
public uint WorkingSetSize;
public uint QuotaPeakPagedPoolUsage;
public uint QuotaPagedPoolUsage;
public uint QuotaPeakNonPagedPoolUsage;
public uint QuotaNonPagedPoolUsage;
public uint PagefileUsage;
public uint PeakPagefileUsage;
}
//simpler, but 32 bit only
[StructLayout(LayoutKind.Sequential, Size=40)]
private struct PROCESS_MEMORY_COUNTERS
{
public uint cb;
public uint PageFaultCount;
public int PeakWorkingSetSize;
public int WorkingSetSize;
public int QuotaPeakPagedPoolUsage;
public int QuotaPagedPoolUsage;
public int QuotaPeakNonPagedPoolUsage;
public int QuotaNonPagedPoolUsage;
public int PagefileUsage;
public int PeakPagefileUsage;
}
Do you know one? Please contribute it!
None.
Please add some!
[DllImport("kernel32.dll")]
private static extern IntPtr GetCurrentProcess();
[StructLayout(LayoutKind.Sequential, Size = 40)]
private struct PROCESS_MEMORY_COUNTERS
{
public uint cb; // The size of the structure, in bytes (DWORD).
public uint PageFaultCount; // The number of page faults (DWORD).
public uint PeakWorkingSetSize; // The peak working set size, in bytes (SIZE_T).
public uint WorkingSetSize; // The current working set size, in bytes (SIZE_T).
public uint QuotaPeakPagedPoolUsage; // The peak paged pool usage, in bytes (SIZE_T).
public uint QuotaPagedPoolUsage; // The current paged pool usage, in bytes (SIZE_T).
public uint QuotaPeakNonPagedPoolUsage; // The peak nonpaged pool usage, in bytes (SIZE_T).
public uint QuotaNonPagedPoolUsage; // The current nonpaged pool usage, in bytes (SIZE_T).
public uint PagefileUsage; // The Commit Charge value in bytes for this process (SIZE_T). Commit Charge is the total amount of memory that the memory manager has committed for a running process.
public uint PeakPagefileUsage; // The peak value in bytes of the Commit Charge during the lifetime of this process (SIZE_T).
}
[DllImport("psapi.dll", SetLastError = true)]
static extern bool GetProcessMemoryInfo(IntPtr hProcess, out PROCESS_MEMORY_COUNTERS counters, uint size);
...
IntPtr currentProcessHandle = GetCurrentProcess();
PROCESS_MEMORY_COUNTERS memoryCounters;
unsafe
{
memoryCounters.cb = (uint) sizeof (PROCESS_MEMORY_COUNTERS);
}
if (GetProcessMemoryInfo(currentProcessHandle, out memoryCounters, memoryCounters.cb))
{
// Work with memoryCounters
...
}
// TODO: Throw a dedicated exception
throw new Exception("GetProcessMemoryInfo returned false. Error Code is " +
Marshal.GetLastWin32Error());